/**
 * Flutter项目创建器模块
 * 
 * 负责执行Flutter官方命令行工具创建新项目，处理不同项目类型的创建参数
 * 支持应用、模块、包和插件等多种项目类型，并处理Flutter SDK路径配置
 */

import { exec } from 'child_process';
import { printColored } from './utils.js';

/**
 * 执行flutter create命令创建新项目
 * 
 * 根据提供的参数调用Flutter SDK的create命令，创建指定类型的Flutter项目
 * 支持自定义Flutter SDK路径，处理不同操作系统下的命令格式差异
 * 
 * @param {string} targetDir - 项目创建目标目录绝对路径
 * @param {string} projectName - 项目名称
 * @param {string} packageName - 应用包名（Android）或Bundle ID（iOS）
 * @param {string} projectType - 项目类型，可选值：'app', 'module', 'package', 'plugin'
 * @param {string} [flutterSdkPath='flutter'] - Flutter SDK路径，默认为系统环境变量中的'flutter'
 * @returns {Promise<boolean>} 创建成功返回true，失败返回false
 */
async function runFlutterCreate (targetDir, projectName, packageName, projectType, flutterSdkPath = 'flutter') {
  return new Promise((resolve) => {
    // 构建flutter create命令参数
    let command = `${flutterSdkPath} create`;

    // 根据项目类型添加参数
    switch (projectType) {
      case 'module':
        command += ' --template=module';
        break;
      case 'package':
        command += ' --template=package';
        break;
      case 'plugin':
        command += ' --template=plugin';
        break;
      case 'app':
      default:
        // 默认创建应用项目
        break;
    }

    // 添加包名参数
    command += ` --org ${packageName}`;

    // 添加项目名称和目标路径
    command += ` --project-name ${projectName}  ${targetDir}`;

    printColored(`执行命令: ${command}`, 'blue');

    // 执行命令
    exec(command, (error, stdout, stderr) => {
      // 输出命令执行过程信息
      if (stdout) printColored(stdout, 'gray');
      if (stderr) printColored(stderr, 'yellow');

      // 处理错误
      if (error) {
        printColored(`Flutter项目创建失败: ${error.message}`, 'red');
        resolve(false);
        return;
      }

      // 验证是否包含成功信息
      if (stdout.includes('All done!') || stdout.includes('Created project')) {
        printColored(`Flutter ${projectType}项目创建成功`, 'green');
        resolve(true);
      } else {
        printColored('Flutter项目创建未检测到成功标志', 'yellow');
        resolve(false);
      }
    });
  });
}

export { runFlutterCreate };

